import java.util.Map;
import java.util.TreeMap;

/**
 * @author : zzr
 * @description :对TreeMap的使用进行测试学习
 * @date :2025_2_27
 */
public class TestMap {
    public static void main(String[] args) {
        Map<String, String> map = new TreeMap<>();

        //put(key,value) 插入key-value的键值对
        // 如果key不存在，将key-value的键值对插入到map中 返回null
        map.put("林冲","豹子头");
        map.put("鲁智深","花和尚");
        String str = map.put("李逵","黑旋风");
//        System.out.println(map.size());
//        System.out.println(map);

        //put(key, value) 注意key不能为空，但value可以为空
        //key如果为空，会抛出空指针异常
        //map.put("无名",null);
        str = map.put("无名",null);
//        System.out.println(map.size());
//        System.out.println(map);

        //put(key,value)
        //如果key存在，则会用value替换掉原来key对应的value，但会返回旧的value
        str = map.put("李逵","铁牛");
//        System.out.println(map);
//        System.out.println(str);

        //get(key) 会返回key对应的value
        //如果key存在，返回key所对应的value
        //如果key不存在，返回null
//        System.out.println(map.get("鲁智深"));
//        System.out.println(map.get("zzz"));

        //GetOrDefault()方法： 如果key存在，则返回key对应的value，如果key不存在，则返回一个默认值
//        System.out.println(map.getOrDefault("李逵", "铁牛"));//注意，这里打印结果是铁牛，是因为上面以及put
        //key为李逵时候的value为铁牛，如果上面put的时候，key为李逵的时候value是其他的，此时会打印其他的
//        System.out.println(map.getOrDefault("史进", "九纹龙"));

        //containKey(key):检测key是否存在，返回key是否包含在Map中，事件复杂度：O(logN)
        //按照红黑树的性质进行查找
        //返回true / false
//        System.out.println(map.containsKey("aaa"));
//        System.out.println(map.containsKey("李逵"));

        //containValue(value)：检测value是否包含在Map中，时间复杂度为：O(N)
        //返回true / false
//        System.out.println(map.containsValue("铁牛"));
//        System.out.println(map.containsValue("大帅哥"));

        //打印所有的key
        //keySet是将map中的key放在一个Set中返回的
//        for(String s : map.keySet()) {
//            System.out.print(s + " ");
//        }
//        System.out.println();
        //打印所有的value
        //values是将map中所有的value放在collect中的一个集合中返回的
//        for(String s : map.values()) {
//            System.out.print(s + " ");
//        }

        //打印所有的键值对
        //entrySet():将Map中的键值对放在Set中返回了
        for(Map.Entry<String, String> entry : map.entrySet()) {
            System.out.print(entry + " ");
        }
    }
}

